package com.example.smartwaterapi.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.example.smartwaterapi.entity.WaterRecord;

import java.time.LocalDate;
import java.util.List;
import java.util.Map;

/**
 * 饮水记录服务接口
 */
public interface WaterRecordService extends IService<WaterRecord> {
    
    /**
     * 添加饮水记录
     */
    boolean addRecord(WaterRecord record);
    
    /**
     * 批量添加饮水记录
     */
    boolean batchAddRecords(List<WaterRecord> records);
    
    /**
     * 获取用户指定日期的饮水记录
     */
    List<WaterRecord> getUserDailyRecords(Long userId, LocalDate date);
    
    /**
     * 分页获取用户饮水记录
     */
    Page<WaterRecord> getUserRecords(Long userId, Integer pageNum, Integer pageSize);
    
    /**
     * 获取用户每日饮水总量
     */
    Integer getUserDailyTotal(Long userId, LocalDate date);
    
    /**
     * 获取用户指定日期范围内每日饮水量
     */
    List<Map<String, Object>> getUserDailyTotalsByDateRange(Long userId, LocalDate startDate, LocalDate endDate);
    
    /**
     * 获取用户指定日期的饮水类型分布
     */
    List<Map<String, Object>> getUserDrinkTypeDistribution(Long userId, LocalDate date);
    
    /**
     * 获取用户指定日期的每小时饮水量
     */
    List<Map<String, Object>> getUserHourlyDistribution(Long userId, LocalDate date);
    
    /**
     * 获取用户饮水目标完成率
     */
    double getUserDailyGoalCompletion(Long userId, LocalDate date);
    
    /**
     * 获取用户连续达标天数
     */
    int getUserConsecutiveGoalDays(Long userId);
    
    /**
     * 获取用户饮水统计概览 - 并发优化版本
     */
    Map<String, Object> getUserWaterStatistics(Long userId, LocalDate date);
    
    /**
     * 获取用户所有时间饮水总量
     */
    Long getUserAllTimeTotal(Long userId);
    
    /**
     * 按日期范围分页获取用户饮水记录
     */
    Page<WaterRecord> getUserRecordsByDateRange(Long userId, LocalDate startDate, LocalDate endDate, int pageNum, int pageSize);
} 